package com.quectel.core.module.workorder.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 工单
 *
 * @author caolu
 * @email louis.cao@quectel.com
 * @date 2021-10-19 13:06:54
 */
@Data
@Schema
public class WorkOrderDto implements Serializable {

    /**
     * ID
     */
    @Schema(description = "ID")
    private Long id;

    /**
     * 租户id
     */
    @Schema(description = "租户id")
    private Long tenantId;

    /**
     * 小区id
     */
    @Schema(description = "小区id")
    private Long villageId;

    /**
     * 楼栋id
     */
    @Schema(description = "楼栋id")
    private Long buildingId;

    /**
     * 楼层id
     */
    @Schema(description = "楼层id")
    private Long floorId;

    /**
     * 房屋id
     */
    @Schema(description = "房屋id")
    private Long roomId;

    /**
     * 工单来源1告警2用户提交3管理员创建
     */
    @Schema(description = "工单来源1告警2住户提交3管理员创建4巡更上报")
    private Byte orderSource;

    /**
     * 告警类型:事件id  用户提交:用户id 管理员创建:管理员id
     */
    @Schema(description = "告警类型:事件id  住户提交:住户id 管理员创建:管理员id")
    private Long sourceId;

    /**
     * 工单分类 字典值
     */
    @Schema(description = "工单分类 字典值")
    private Byte category;

    /**
     * 工单二级分类 字典值
     */
    @Schema(description = "工单二级分类 字典值")
    private Byte type;

    /**
     * 工单编码
     */
    @Schema(description = "工单编码")
    private String orderCode;

    /**
     * 工单图片描述json数组
     */
    @Schema(description = "工单图片描述json数组")
    private String pictures;

    /**
     * 工单详细描述
     */
    @Schema(description = "工单详细描述")
    @NotEmpty
    @Length(min = 1, max = 1000)
    private String detail;

    /**
     * 工单创建时间
     */
    @Schema(description = "工单创建时间")
    private Date createTime;

    /**
     * 工单修改时间
     */
    @Schema(description = "工单修改时间")
    private Date editTime;

    /**
     * 第一次处理时间
     */
    @Schema(description = "第一次处理时间")
    private Date firstHandTime;

    /**
     * 工单完成时间
     */
    @Schema(description = "工单完成时间")
    private Date finishTime;

    /**
     * 当前经办人id
     */
    @Schema(description = "当前经办人id")
    private Long handlerId;

    /**
     * 状态，0未处理；1已接单；2已流转 3已完成 4已完结
     */
    @Schema(description = "状态，0未处理；1已接单；2已流转 3已完成 4已完结")
    private Byte status;

    /**
     * 完工描述
     */
    @Schema(description = "完工描述")
    private String completeRemark;

    /**
     * 完工图片 json数组
     */
    @Schema(description = "完工图片 json数组")
    private String completePictures;

    /**
     * 客户评价
     */
    @Schema(description = "客户评价")
    private String appraise;

    /**
     * 评分
     */
    @Schema(description = "评分")
    private BigDecimal score;

    /**
     * 评论图片
     */
    @Schema(description = "评论图片")
    private String commentPictures;

    /**
     * 评论时间
     */
    @Schema(description = "评论时间")
    private Date commentTime;


    /************非数据库字段 start ************/

    /**
     * 工单来源人的姓名
     */
    @Schema(description = "工单来源人的姓名")
    private String orderSourceUsername;
    /**
     * 工单来源人的手机
     */
    @Schema(description = "工单来源人的手机")
    private String orderSourceUserMobile;

    /**
     * 当前经办人id
     */
    @Schema(description = "当前经办人用户名")
    private String handlerUsername;
    /**
     * 小区名称
     */
    @Schema(description = "小区名称")
    private String villageName;
    /**
     * 楼栋名称
     */
    @Schema(description = "楼栋名称")
    private String buildingName;
    /**
     * 楼层名称
     */
    @Schema(description = "楼层名称")
    private String floorName;

    /**
     * 房屋名称
     */
    @Schema(description = "房屋名称")
    private String roomName;

    @Schema(description = "后端计算好的状态名称")
    private String statusName;
    /**
     * 耗时 x天x小时...
     */
    @Schema(description = "耗时 x天x小时...")
    private String useTime;


    private List<WorkOrderLogDto> workOrderLogDtoList;

    private List<WorkOrderServiceItemDto> workOrderServiceItems;
    /************非数据库字段 end **************/
}
